#pragma once

#include "Globals.h"
#include "Rect.h"
#include "Point.h"

namespace game_engine { namespace tile_engine
{

//CONSTANTS:
typedef enum {
    WALKABLE = 0,
	UNWALKABLE = 1,
	DAMAGE = 2,
	DEATH = 3,
} TileType;

/*!
 * \class Tile
 * \brief 
 */
class Tile
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
private:
    utils::Point worldPosition;
	TileType tileType;
	string textureName;
    utils::Rect frame;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    Tile(void);
    Tile(const utils::Point &pos, const utils::Rect &rect = utils::Rect());
    Tile(const string &texture, const utils::Rect &rect);
    virtual ~Tile(void);

    // Others
    void drawInRect(const utils::Rect &rect) const;

    // Getters
    const utils::Point getWorldPosition(void) const;
    const utils::Rect getBoxCollider(void) const;
    const string& getTextureName(void) const;
    const utils::Rect& getFrame(void) const;
    const TileType getTileType(void) const;

    // Setters
    void setTextureName(const string &name);
    void setFrame(const utils::Rect &rect);
    void setTileType(const INT32 t);

};

}}
